package br.ufrn.sigtcc.controller.cadastros;

import java.util.GregorianCalendar;
import java.util.logging.Logger;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.event.FlowEvent;

import br.ufrn.sigtcc.controller.cadastros.interfaces.IControleCadastroVisitante;
import br.ufrn.sigtcc.controller.services.VisitanteServiceImpl;
import br.ufrn.sigtcc.model.entidades.Endereco;
import br.ufrn.sigtcc.model.entidades.Telefone;
import br.ufrn.sigtcc.model.entidades.Visitante;
import br.ufrn.sigtcc.model.utils.status.EStatusCadastro;
import br.ufrn.sigtcc.model.utils.status.EStatusVisitante;
import br.ufrn.sigtcc.util.exceptions.BDException;
import br.ufrn.sigtcc.util.exceptions.BusinessException;


@ManagedBean(name="visitanteBean")
@SessionScoped
public class ControleCadastroVisitante extends VisitanteServiceImpl implements IControleCadastroVisitante{

	
	
	public ControleCadastroVisitante() {
		// TODO Auto-generated constructor stub
	}
	
	private Visitante visitante =  new Visitante();
	private Endereco endereco =  new Endereco();
	private Telefone telefone =  new Telefone();
	
	public Visitante getVisitante() {
		return visitante;
	}

	public void setVisitante(Visitante visitante) {
		this.visitante = visitante;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Telefone getTelefone() {
		return telefone;
	}

	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}

	@Override
	public void cadastrarVisitante() throws BDException, BusinessException {
		
		visitante.setEndereco(endereco);
		visitante.setTelefone(telefone);
		visitante.setStatusCadastro(EStatusCadastro.PENDENTE_DE_HOMOLOGACAO);
		visitante.setStatusVisitante(EStatusVisitante.INATIVO);
		visitante.setDataCadastro(new GregorianCalendar());
		
		cadastrarVisitante(visitante);
		
	}

	@Override
	public void removerVisitante() throws BDException, BusinessException {

		removerVisitante(visitante);
		
	}

	@Override
	public void atualizarVisitante() throws BDException, BusinessException {

		atualizarVisitante(visitante);
		
	}
	

	private boolean skip;
	
	private static Logger logger = Logger.getLogger(ControleCadastroVisitante.class.getName());

	public void cadastrarVisitante(ActionEvent actionEvent) throws BDException, BusinessException {

		cadastrarVisitante();
		
		FacesMessage msg = new FacesMessage("Sucesso", "Bem Vindo :" + visitante.getNome() + "\nAguarde seu cadastro ser homologado para que possa contribuir e usufruir das vantagens do nosso Sistema");

		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	
	public boolean isSkip() {
		return skip;
	}

	public void setSkip(boolean skip) {
		this.skip = skip;
	}
	
	public String onFlowProcess(FlowEvent event) {
		logger.info("Passo Corrente:" + event.getOldStep());
		logger.info("Proximo passo:" + event.getNewStep());
		
		if(skip) {
			skip = false;	
			return "confirm";
		}
		else {
			return event.getNewStep();
		}
	}

}
